HolidayCalendar = new Object();

HolidayCalendar.holiday_store = Ext.create('Ext.data.Store', {
	fields : [ 'date', 'description', 'bank', 'public_', 'mercantile', ]
});

var disableDates = [];
HolidayCalendar.getHoliday = function() {
	var grid = null;
	var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
		clicksToMoveEditor : 2,
		autoCancel : false
	});
	grid = Ext.create('Ext.grid.Panel', {
		layout : {
			type : 'fit'
		},
		store : HolidayCalendar.holiday_store,
		height : 300,
		id : 'holidayGrid',
		anchor : '100%',
		columns : [ {
			header : 'Date',
			dataIndex : 'date',
			width : 150,
			flex : 1
		}, {
			header : 'Description',
			dataIndex : 'description',
			width : 150,
			flex : 1,
			editor : {
			// allowBlank : false
			}
		}, {
			text : 'Holiday Type',
			columns : [ {
				header : 'Bank',
				xtype : 'booleancolumn',
				dataIndex : 'bank',
				align : 'center',
				trueText : 'Yes',
				falseText : 'No',
				width : 100,
				editor : {
					xtype : 'checkboxfield',
					allowBlank : false
				}
			}, {
				header : 'Public',
				xtype : 'booleancolumn',
				dataIndex : 'public_',
				trueText : 'Yes',
				falseText : 'No',
				align : 'center',
				width : 100,
				editor : {
					xtype : 'checkboxfield',
					allowBlank : false
				}
			}, {
				header : 'Mercantile',
				xtype : 'booleancolumn',
				trueText : 'Yes',
				falseText : 'No',
				dataIndex : 'mercantile',
				align : 'center',
				width : 100,
				editor : {
					xtype : 'checkboxfield',
					allowBlank : false
				}
			} ]
		} ],
		dockedItems : [ {
			xtype : 'toolbar',
			dock : 'top',
			items : [ '->', {
				xtype : 'button',
				text : 'Add',
				listeners : {
					click : function() {
						var newDate = Ext.Date.format(Ext.getCmp('holiyday').getValue(), 'd/m/Y');
						var recordIndex = HolidayCalendar.holiday_store.findBy(function(record, id) {
							if (record.get('date') === newDate) {
								return true;
							}
							return false;
						});

						if (recordIndex != -1) {
							Ext.Msg.alert('Error', "Duplicate recode fund");
						} else {
							HolidayCalendar.holiday_store.add({
								date : newDate,
								description : Ext.getCmp('description').getValue(),
								bank : Ext.getCmp('B').getValue(),
								public_ : Ext.getCmp('P').getValue(),
								mercantile : Ext.getCmp('M').getValue()
							});
							this.up('form').getForm().reset();
						}
					}
				}
			}, {
				xtype : 'button',
				text : 'Remove',
				listeners : {
					click : function() {
						var selection = grid.getView().getSelectionModel().getSelection()[0];
						if (selection) {
							HolidayCalendar.holiday_store.remove(selection);
						}
					}
				}
			} ]
		} ],
		plugins : [ rowEditing ],
		listeners : {
			render : function(p) {
				Ext.Ajax.request({
					url : 'getHoliday.action',
					success : function(response) {
						var obj = Ext.decode(response.responseText);
						HolidayCalendar.holiday_store.removeAll();
						HolidayCalendar.holiday_store.loadRawData(obj.calendarDtos);
						HolidayCalendar.holiday_store.each(function(record) {
							disableDates.push(record.get('date'));
						});
						if (disableDates.length > 0)
							Ext.getCmp('holiyday').setDisabledDates(disableDates);
					}
				});
			}
		}
	});

	return Ext.create('Ext.form.FieldSet', {
		defaults : {
			anchor : '100%'
		},
		items : [ {
			xtype : 'fieldcontainer',
			layout : 'hbox',
			items : [ {
				xtype : 'datepicker',
				flex : 1,
				name : 'date',
				id : 'holiyday',
				format : 'd/m/Y',
				disabledDatesText : 'Holiday'
			}, {
				xtype : 'fieldcontainer',
				layout : 'anchor',
				flex : 2,
				items : [ {
					xtype : 'textfield',
					value : 'Holiday',
					anchor : '100%',
					id : 'description',
					name : 'description',
					fieldLabel : 'Description:',
					padding : '0 0 0 10'
				}, {
					flex : 2,
					xtype : 'fieldcontainer',
					layout : 'hbox',
					fieldLabel : 'Holiday Type',
					anchor : '100%',
					defaultType : 'checkboxfield',
					items : [ {
						boxLabel : 'Bank',
						name : 'bank',
						inputValue : '1',
						checked : true,
						flex : 1,
						padding : '0 0 0 10',
						id : 'B'
					}, {
						boxLabel : 'Public',
						name : 'public_',
						inputValue : '1',
						checked : true,
						flex : 1,
						id : 'P'
					}, {
						boxLabel : 'Mercantile',
						name : 'mercantile',
						inputValue : '1',
						checked : true,
						flex : 1,
						id : 'M'
					} ]
				} ]
			} ]
		}, grid ]

	});
};

HolidayCalendar.getCenterPanel = function() {

	var addHoliday = HolidayCalendar.getHoliday();

	return formPanel = Ext.create('Ext.form.FormPanel', {
		title : 'Holiday Calendar',
		bodyPadding : '20',
		autoScroll : true,
		id : 'config-form',
		frame : true,
		defaults : {
			labelWidth : 175,
			anchor : '65%',
		},
		fieldDefaults : {
			labelAlign : 'left',
			labelWidth : 150,
		},
		items : [ addHoliday ],
		buttonAlign : 'center',
		buttons : [ {
			text : 'Cancel',
			handler : function() {
				App.Core.removeScreen();
			}
		}, {
			text : 'Reset',
			handler : function() {
				this.up('form').getForm().reset();
			}
		}, {
			text : 'Save',
			id : 'save',
			handler : function() {
				var form = this.up('form').getForm();
				if (form.isValid()) {
					formPanel.setLoading('Saving...');
					var grids = Ext.getCmp('holidayGrid');
					var holiday = [];
					grids.getStore().each(function(record) {
						var obj = {
							"date" : record.get("date"),
							"description" : record.get("description"),
							"bank" : record.get("bank"),
							"mercantile" : record.get("mercantile"),
							"public_" : record.get("public_")
						};
						holiday.push(obj);
					});
					form.url = 'addHoliday.action';
					form.submit({
						params : {
							"holidayList" : Ext.encode(holiday),
						},
						success : function(form, action) {
							form.reset();
							Ext.getCmp('save').setText('Save');
							grids.getStore().removeAll();
							Ext.Msg.alert('Success', 'Saved Successfully');
							formPanel.setLoading(false);
						},
						failure : function(form, action) {
							Ext.Msg.alert('Failed', 'There is some error returned from the server.');
							formPanel.setLoading(false);
						}
					});
				}
			}
		} ],
		listeners : {
			render : function(p) {
				if (App.screenPermiton.getAt(0).data.create == 0)
					Ext.getCmp('save').disable();
				else
					Ext.getCmp('save').enable();
			}
		}
	});

};